// 权限模型
const { AuthOne, AuthTwo, AuthThree, validateAuth } = require('../../../models/auth');
// 统一数据返回类
const { DataReturn } = require('../../../common/returnclass');

/**
 * @api {Post} /auths 创建系统权限
 * @apiGroup Admin-Auths
 *
 * @apiParam {ObjectId} _id 父级权限id
 * @apiParam {String} authName 权限名称
 * @apiParam {String} path 权限路径
 * @apiParam {Number} level 权限等级
 *
 * @apiSuccess {Number} code 状态码
 * @apiSuccess {Object} data 返回数据
 * @apiSuccess {String} msg  返回消息
 */
module.exports = async (req, res) => {
	// title 权限名称 _id 父级id cate_level 权限级别
	let { authName, _id, level, path } = req.fields;
	console.log(req.fields)
	// 数据格式校验
	const { error } = validateAuth(req.fields);
	// 格式不符合要求
	if (error) return DataReturn.getData(res,400,[],error.message);
	
	let auths;
	if (level == 1) {
		// 查询权限
		auths = await AuthOne.findOne({authName});
		// 权限已存在
		if (auths) return DataReturn.getData(res,400,[],'该权限已存在');
		// 创建权限对象
		auths = new AuthOne({authName,path});
		// 保存权限
		auths.save()
		.then(()=>{
			DataReturn.getData(res,200, [],'添加权限成功')
		}).catch(()=>{
			DataReturn.getData(res,400,[],'添加权限失败')
		})
		
	} else if (level == 2) {
		// 查询权限
		auths = await AuthTwo.findOne({authName});
		// 权限已存在
		if (auths) return DataReturn.getData(res,400,[],'该权限已存在');
		// 创建权限对象
		auths = new AuthTwo({authName,path});
		// 保存权限
		auths.save()
		.then(async ()=>{
			return await AuthOne.updateOne({ _id },{ $push: { children: auths._id }})
		}).then(()=>{
			DataReturn.getData(res,200, [],'添加权限成功')
		}).catch(()=>{
			DataReturn.getData(res,400,[],'添加权限失败')
		})
		
	} else if (level == 3) {
		// 查询权限
		auths = await AuthThree.findOne({authName});
		// 权限已存在
		if (auths) return DataReturn.getData(res,400,[],'该权限已存在');
		// 创建权限对象
		auths = new AuthThree({authName,path});
		// 保存权限
		auths.save()
		.then(async ()=>{
			return await AuthTwo.updateOne({_id },{ $push: { children: auths._id }})
		}).then(()=>{
			DataReturn.getData(res,200, [],'添加权限成功')
		}).catch(()=>{
			DataReturn.getData(res,400,[],'添加权限失败')
		})
		
	}
	

}
